home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / javac / Main.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  6.1 KB  |  254 lines

  1. package sun.tools.javac;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.OutputStream;
  9. import java.util.Enumeration;
  10. import java.util.Vector;
  11. import sun.tools.java.ClassDeclaration;
  12. import sun.tools.java.ClassDefinition;
  13. import sun.tools.java.ClassFile;
  14. import sun.tools.java.ClassPath;
  15. import sun.tools.java.Constants;
  16. import sun.tools.java.Environment;
  17.  
  18. public class Main implements Constants {
  19.    String program;
  20.    OutputStream out;
  21.  
  22.    public Main(OutputStream var1, String var2) {
  23.       this.out = var1;
  24.       this.program = var2;
  25.    }
  26.  
  27.    public void output(String var1) {
  28.       try {
  29.          int var2 = var1.length();
  30.  
  31.          for(int var3 = 0; var3 < var2; ++var3) {
  32.             this.out.write(var1.charAt(var3));
  33.          }
  34.  
  35.          this.out.write(10);
  36.       } catch (IOException var4) {
  37.       }
  38.    }
  39.  
  40.    public void error(String var1) {
  41.       this.output(this.program + ": " + var1);
  42.    }
  43.  
  44.    public void usage() {
  45.       this.output("use: " + this.program + " [-g][-O][-debug][-depend][-nowarn][-verbose][-classpath path][-nowrite][-d dir] file.java...");
  46.    }
  47.  
  48.    public synchronized boolean compile(String[] var1) {
  49.       String var2 = System.getProperty("java.class.path");
  50.       File var3 = null;
  51.       int var4 = 4;
  52.       long var5 = System.currentTimeMillis();
  53.       Vector var7 = new Vector();
  54.       boolean var8 = false;
  55.  
  56.       for(int var9 = 0; var9 < var1.length; ++var9) {
  57.          if (var1[var9].equals("-g")) {
  58.             var4 &= -17;
  59.             var4 |= 8;
  60.          } else if (var1[var9].equals("-O")) {
  61.             var4 &= -9;
  62.             var4 |= 48;
  63.          } else if (var1[var9].equals("-nowarn")) {
  64.             var4 &= -5;
  65.          } else if (var1[var9].equals("-debug")) {
  66.             var4 |= 2;
  67.          } else if (var1[var9].equals("-depend")) {
  68.             var4 |= 32;
  69.          } else if (var1[var9].equals("-verbose")) {
  70.             var4 |= 1;
  71.          } else if (var1[var9].equals("-nowrite")) {
  72.             var8 = true;
  73.          } else if (var1[var9].equals("-classpath")) {
  74.             if (var9 + 1 >= var1.length) {
  75.                this.error("-classpath requires argument");
  76.                this.usage();
  77.                return false;
  78.             }
  79.  
  80.             ++var9;
  81.             var2 = var1[var9];
  82.          } else if (var1[var9].equals("-d")) {
  83.             if (var9 + 1 >= var1.length) {
  84.                this.error("-d requires argument");
  85.                this.usage();
  86.                return false;
  87.             }
  88.  
  89.             ++var9;
  90.             var3 = new File(var1[var9]);
  91.             if (!var3.exists()) {
  92.                this.error(var3.getPath() + " does not exist");
  93.                return false;
  94.             }
  95.          } else {
  96.             if (var1[var9].startsWith("-")) {
  97.                this.error("invalid flag: " + var1[var9]);
  98.                this.usage();
  99.                return false;
  100.             }
  101.  
  102.             if (!var1[var9].endsWith(".java")) {
  103.                this.error("invalid argument: " + var1[var9]);
  104.                this.usage();
  105.                return false;
  106.             }
  107.  
  108.             var7.addElement(var1[var9]);
  109.          }
  110.       }
  111.  
  112.       if (var7.size() == 0) {
  113.          this.usage();
  114.          return false;
  115.       } else {
  116.          if (var2 == null) {
  117.             var2 = ".";
  118.          }
  119.  
  120.          ClassPath var10 = new ClassPath(var2);
  121.          BatchEnvironment var11 = new BatchEnvironment(this.out, var10);
  122.          var11.flags |= var4;
  123.  
  124.          try {
  125.             Enumeration var12 = var7.elements();
  126.  
  127.             while(var12.hasMoreElements()) {
  128.                File var13 = new File((String)var12.nextElement());
  129.  
  130.                try {
  131.                   var11.parseFile(new ClassFile(var13));
  132.                } catch (FileNotFoundException var23) {
  133.                   ((Environment)var11).error(0, "cant.read", var13.getPath());
  134.                }
  135.             }
  136.  
  137.             ByteArrayOutputStream var30 = new ByteArrayOutputStream(4096);
  138.  
  139.             boolean var14;
  140.             do {
  141.                var14 = true;
  142.                var11.flushErrors();
  143.                Enumeration var15 = var11.getClasses();
  144.  
  145.                while(var15.hasMoreElements()) {
  146.                   ClassDeclaration var16 = (ClassDeclaration)var15.nextElement();
  147.                   switch (var16.getStatus()) {
  148.                      case 0:
  149.                         if (!((Environment)var11).dependencies()) {
  150.                            break;
  151.                         }
  152.                      case 3:
  153.                         var14 = false;
  154.                         var11.loadDefinition(var16);
  155.                         if (var16.getStatus() != 4) {
  156.                            break;
  157.                         }
  158.                      case 4:
  159.                         var14 = false;
  160.                         var30.reset();
  161.                         SourceClass var17 = (SourceClass)var16.getClassDefinition(var11);
  162.                         var17.compile(var11, var30);
  163.                         var16.setDefinition(var17, 5);
  164.                         if (!((ClassDefinition)var17).getError() && !var8) {
  165.                            String var18 = var16.getName().getQualifier().toString().replace('.', File.separatorChar);
  166.                            String var19 = var16.getName().getName().toString() + ".class";
  167.                            File var33;
  168.                            if (var3 != null) {
  169.                               if (var18.length() > 0) {
  170.                                  var33 = new File(var3, var18);
  171.                                  if (!var33.exists()) {
  172.                                     var33.mkdirs();
  173.                                  }
  174.  
  175.                                  var33 = new File(var33, var19);
  176.                               } else {
  177.                                  var33 = new File(var3, var19);
  178.                               }
  179.                            } else {
  180.                               ClassFile var21 = (ClassFile)((ClassDefinition)var17).getSource();
  181.                               if (var21.isZipped()) {
  182.                                  ((Environment)var11).error(0, "cant.write", var21.getPath());
  183.                                  continue;
  184.                               }
  185.  
  186.                               var33 = new File(var21.getPath());
  187.                               var33 = new File(var33.getParent(), var19);
  188.                            }
  189.  
  190.                            try {
  191.                               FileOutputStream var35 = new FileOutputStream(var33.getPath());
  192.                               var30.writeTo(var35);
  193.                               var35.close();
  194.                               if (((Environment)var11).verbose()) {
  195.                                  this.output("[wrote " + var33.getPath() + "]");
  196.                               }
  197.                            } catch (IOException var22) {
  198.                               ((Environment)var11).error(0, "cant.write", var33.getPath());
  199.                            }
  200.                         }
  201.                   }
  202.                }
  203.             } while(!var14);
  204.          } catch (Error var24) {
  205.             ((Throwable)var24).printStackTrace();
  206.             ((Environment)var11).error(0, "fatal.error");
  207.          } catch (Exception var25) {
  208.             ((Throwable)var25).printStackTrace();
  209.             ((Environment)var11).error(0, "fatal.exception");
  210.          }
  211.  
  212.          var11.flushErrors();
  213.          boolean var29 = true;
  214.          if (var11.nerrors > 0) {
  215.             String var31 = "";
  216.             if (var11.nerrors > 1) {
  217.                var31 = var11.nerrors + " errors";
  218.             } else {
  219.                var31 = "1 error";
  220.             }
  221.  
  222.             if (var11.nwarnings > 0) {
  223.                if (var11.nwarnings > 1) {
  224.                   var31 = var31 + ", " + var11.nwarnings + " warnings";
  225.                } else {
  226.                   var31 = var31 + ", 1 warning";
  227.                }
  228.             }
  229.  
  230.             this.output(var31);
  231.             var29 = false;
  232.          } else if (var11.nwarnings > 0) {
  233.             if (var11.nwarnings > 1) {
  234.                this.output(var11.nwarnings + " warnings");
  235.             } else {
  236.                this.output("1 warning");
  237.             }
  238.          }
  239.  
  240.          if (((Environment)var11).verbose()) {
  241.             var5 = System.currentTimeMillis() - var5;
  242.             this.output("[done in " + var5 + "ms]");
  243.          }
  244.  
  245.          return var29;
  246.       }
  247.    }
  248.  
  249.    public static void main(String[] var0) {
  250.       Main var1 = new Main(System.out, "javac");
  251.       System.exit(var1.compile(var0) ? 0 : 1);
  252.    }
  253. }
  254.